package br.com.site.equipe.dao;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.site.dao.DAOGenericoImpl;
import br.com.site.model.Equipe;

@Repository
public class EquipeDAOImpl extends DAOGenericoImpl<Equipe, Long> implements EquipeDAO{
	
	private static Log LOG = LogFactory.getLog(EquipeDAOImpl.class);

	@Transactional(readOnly = true)
	public List<Equipe> listarTodos() {
		return listar();
	}

	@Transactional(readOnly = true)
	public Equipe buscarPorId(Long id) {
		return findPorId(id);
	}

	@Transactional
	public Long save(Equipe equipe) {
		return super.save(equipe);
	}

	@Transactional
	public boolean saveOrUpdate(Equipe equipe) {
		return super.saveOrUpdate(equipe);
	}

	@Transactional
	public boolean merge(Equipe equipe) {
		return super.merge(equipe);
	}

	@Transactional
	public boolean update(Equipe equipe) {
		return super.update(equipe);
	}

	@Transactional
	public boolean delete(Equipe equipe) {
		return super.delete(equipe);
	}

	@Transactional(readOnly = true)
	public Equipe buscarEquipe(Long id){
		Criteria criteria = criarCriteria(new Equipe());
		criteria.add(Restrictions.eq("id", id));
		Equipe equipe = (Equipe) criteria.uniqueResult();
		Hibernate.initialize(equipe.getUsuarios());
		return equipe;
	}

}
